#[钛妹]: 钛哥！我整理购物清单总是一个个变量好麻烦，有解吗？
#[钛哥]: 这就该请出Python的看家本领——用列表当数组！
shopping_list = ["牛奶", "鸡蛋", "面包"]
print("初始清单:", shopping_list)  # ['牛奶','鸡蛋','面包']

#[钛妹]: 怎么获取第三个物品？索引从0开始吗？
#[钛哥]: 没错！索引从0起跳，还能倒着数~
print("正数索引:", shopping_list[1])  # 鸡蛋
print("负数索引:", shopping_list[-1])  # 面包

#[钛妹]: 临时修改清单怎么做？比如换品牌...
#[钛哥]: 直接赋值修改，so easy！
shopping_list[0] = "有机牛奶"
print("修改后:", shopping_list)  # 首项已替换

#[钛妹]: 清单长度怎么查？要自己数吗？
#[钛哥]: len()函数一键搞定！
print("清单长度:", len(shopping_list))  # 3
print("最大索引:", len(shopping_list)-1)  # 2

#[钛妹]: 遍历所有物品必须用for循环？
#[钛哥]: 最推荐这种方式！看实例：
print("今日需采购:")
for index, item in enumerate(shopping_list):
    print(f"{index+1}. {item}")

#[钛妹]: 动态添加物品怎么操作？
#[钛哥]: append()方法尾部追加：
shopping_list.append("苹果")
print("追加后:", shopping_list)  # 新增苹果

#[钛妹]: 想插入到指定位置怎么办？
#[钛哥]: insert()方法精准插入：
shopping_list.insert(1, "菠菜")
print("插入后:", shopping_list)  # 位置1插入菠菜

#[钛妹]: 删除物品有哪些姿势？
#[钛哥]: 三大招数各有用处：
# pop(索引)  按位置删
# remove(值) 按内容删 
# del语句    直接删除
shopping_list.pop(2)  # 删除索引2的面包
print("pop删除后:", shopping_list)

shopping_list.remove("鸡蛋")  # 删除指定元素
print("remove删除后:", shopping_list)

#[钛妹]: 清空整个数组怎么做？
#[钛哥]: clear()一键初始化：
temp_list = shopping_list.copy()
temp_list.clear()
print("清空后:", temp_list)  # []

#[钛妹]: 数组成员检测怎么做？
#[钛哥]: in运算符最直观：
print("有苹果吗？", "苹果" in shopping_list)  # True

#[钛妹]: 遇到重复元素怎么处理？
#[钛哥]: count()统计出现次数：
nums = [2,5,2,8,2]
print("数字2出现次数:", nums.count(2))  # 3

#[钛妹]: 两个数组合并怎么办？
#[钛哥]: extend()或+运算符：
fruits = ["香蕉", "橙子"]
shopping_list.extend(fruits)
print("合并后:", shopping_list)  # 追加水果

#[钛妹]: 怎么创建多维数组？
#[钛哥]: 列表嵌套实现：
matrix = [
    [1,2,3],
    [4,5,6],
    [7,8,9]
]
print("矩阵第二行:", matrix[1])  # [4,5,6]

#[钛妹]: 数组反转有快捷方式吗？
#[钛哥]: reverse()一键倒序：
nums = [1,2,3]
nums.reverse()
print("反转后:", nums)  # [3,2,1]

#[钛妹]: 排序有什么讲究？
#[钛哥]: sort()支持自定义：
ages = [23,17,35]
ages.sort()
print("默认排序:", ages)  # [17,23,35]

# 降序排序
ages.sort(reverse=True)
print("降序排序:", ages)  # [35,23,17]

#[钛妹]: 如何复制数组不被牵连？
#[钛哥]: 深浅拷贝要分清：
# 浅拷贝
list1 = [["苹果"]]
list2 = list1.copy()
list2[0].append("香蕉")
print("浅拷贝结果:", list1)  # ['苹果','香蕉']

# 深拷贝
import copy
list3 = copy.deepcopy(list1)
list3[0].append("橙子")
print("深拷贝结果:", list1)  # 不影响原数组

#[钛妹]: 数组运算有什么技巧？
#[钛哥]: 列表推导式超高效：
squares = [x**2 for x in range(5)]
print("平方数组:", squares)  # [0,1,4,9,16]

#[钛妹]: 过滤数据怎么最优雅？
#[钛哥]: 推导式+条件判断：
scores = [85,92,78,60]
passed = [s for s in scores if s >=80]
print("及格名单:", passed)  # [85,92]

#[钛妹]: 类型转换怎么处理？
#[钛哥]: 轻松转换其他数据结构：
# 转元组
tuple_arr = tuple(shopping_list)
print("元组类型:", type(tuple_arr))

# 转集合
set_arr = set(shopping_list)
print("集合类型:", type(set_arr))

#[钛妹]: 内存优化有什么讲究？
#[钛哥]: 数组 VS 元组：
import sys
arr = [1,2,3]
tup = (1,2,3)
print("列表内存:", sys.getsizeof(arr))  # 较大
print("元组内存:", sys.getsizeof(tup))  # 较小

#[钛妹]: 总结今天学的：
# 1. 列表就是瑞士军刀数组
# 2. 增删改查样样精通
# 3. 推导式处理最优雅
# 4. 深浅拷贝要小心
#[钛哥]: 漏了一个重点！
# 5. 性能优化靠数据结构选择

#[钛妹]: 对了各位！持续学习才是硬道理！点赞关注不迷路！